package com.ruoyi.framework.web.domain.server

import com.ruoyi.common.utils.Arith.div
import com.ruoyi.common.utils.Arith.mul
import com.ruoyi.common.utils.DateUtils
import com.ruoyi.common.utils.DateUtils.nowDate
import com.ruoyi.common.utils.DateUtils.parseDateToStr
import com.ruoyi.common.utils.DateUtils.serverStartDate
import com.ruoyi.common.utils.DateUtils.timeDistance
import java.lang.management.ManagementFactory

/**
 * JVM相关信息
 *
 * @author ruoyi
 */
class Jvm {
    /**
     * 当前JVM占用的内存总数(M)
     */
     var total = 0.0
        get() = div(field, (1024 * 1024).toDouble(), 2)

    /**
     * JVM最大可用内存总数(M)
     */
     var max = 0.0
        get() = div(field, (1024 * 1024).toDouble(), 2)

    /**
     * JVM空闲内存(M)
     */
     var free = 0.0
        get() = div(field, (1024 * 1024).toDouble(), 2)

    /**
     * JDK版本
     */
     var version: String? = null

    /**
     * JDK路径
     */
     var home: String? = null




    fun getUsed(): Double {
        return div(total - free, (1024 * 1024).toDouble(), 2)
    }

    fun getUsage(): Double {
        return mul(div(total - free, total, 4), 100.0)
    }

    /**
     * 获取JDK名称
     */
    fun getName(): String? {
        return ManagementFactory.getRuntimeMXBean().vmName
    }



    /**
     * JDK启动时间
     */
    fun getStartTime(): String {
        return parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, serverStartDate)
    }

    /**
     * JDK运行时间
     */
    fun getRunTime(): String {
        return timeDistance(nowDate, serverStartDate)
    }

    /**
     * 运行参数
     */
    fun getInputArgs(): String {
        return ManagementFactory.getRuntimeMXBean().inputArguments.toString()
    }
}
